//
//  ApushHttpOption.h
//  ApexPush
//
//  Created by xuxinhua on 2022/2/9.
//  Copyright © 2022 User. All rights reserved.
//

#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger,ApexPushSecurityPolicyMode){
    ApexPushSecurityPolicyModeTrustAll = -1,//信任所有证书
    ApexPushSecurityPolicyModeOneWay = 1,//单向https
    ApexPushSecurityPolicyModeTwoWay = 2//双向https
} ;
NS_ASSUME_NONNULL_BEGIN

@interface ApushHttpOption : NSObject<NSCopying,NSMutableCopying>
@property (nonatomic,assign,getter=isTls) BOOL TLS;//是否开启https
/**
 说明:
 1、启用tls,cer格式的证书路径(cerPath)不能为空
 2、mode为单向认证时,p12格式的证书路径(p12Path)可以为空
 3、mode为双向认证时,p12格式的证书路径(p12Path)和证书密码(p12Password可以为@"")不可为空
 4、允许使用自签名证书(allowInvalidCertificates=YES)并且验证域名(validatesDomainName=YES)时
    验证整本证书内容
 5、允许使用自签名证书(allowInvalidCertificates=YES)并且不验证域名(validatesDomainName=NO)时
 验证证书是否存在与证书链中
 6、不允许使用自签名证书(allowInvalidCertificates=NO)就是真的ca证书，按照正常逻辑验证证书
 
 证书生成方式:
 1、双向认证方法:让后台生成 server.crt和 client.p12文件(client.p12文件由client.crt和client.key合成)
 2、单向认证方法：让后台生成 server.crt
 3、使用命令行把crt转化为cer格式
    openssl x509 -in server.crt -out server.cer -outform der
 */
@property (nonatomic,assign) ApexPushSecurityPolicyMode mode;//认证模式
@property (nonatomic,copy) NSString *p12Path;//客户端p12证书路径
@property (nonatomic,copy) NSString *p12Password;//客户端p12证书密码
@property (nonatomic,copy) NSString *cerPath;//服务端cer证书路径
@property (nonatomic, assign) BOOL allowInvalidCertificates;//是否允许无效证书
@property (nonatomic, assign) BOOL validatesDomainName;//是否验证域名
@property (nonatomic,copy) NSString *host;//主机地址
@property (nonatomic,assign) int port;//端口
@end

NS_ASSUME_NONNULL_END
